﻿#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTimer>
#include <QGraphicsDropShadowEffect>
#include <QMouseEvent>
#include <QDebug>
#include <QPushButton>
#include <QFileDialog>
#include <QPixmap>
#include <QCloseEvent>
#include <QSystemTrayIcon>
#include <QMenu>
#include <QAction>
#include "config.h"
#include <QFile>
#include <QDir>
#include <QRandomGenerator>
#include <QTime>
#include <QDesktopWidget>
#include "changetip.h"
#include <QTextStream>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    bool eventFilter(QObject* watched,QEvent* event);//事件过滤
    void loadAnmiation();
    void addMoveAnimation();

private slots:
    void onTimer1Out();
    void onTimer2Out();
    void onTimer3Out();
    void onTimer4Out();

    void onBtnChangeClicked();
    void closeEvent(QCloseEvent* event);
    void onBtnCloseClicked();

private:
    Ui::MainWindow *ui;

    enum STATE{STAY,MOVE,CLIMB,DRAG};//行为模式
    STATE m_state;

    enum MOVEDIRECTION{LEFT,RIGHT,TOP,BOTTOM};//移动方向
    MOVEDIRECTION m_moveDirection;

    enum ANIMATIONMODE {SHIFT,KEEP,MIX};//预期动画模式
    ANIMATIONMODE m_animationModel;

    int m_currentFrame;//记录当前帧率
    int m_currentTotalFrame;//记录当前动画总帧率
    QString m_currentFilePath;//记录当前动画第一帧图片路径和名称

    QTimer* m_timer1;//一号定时器,用于切换动画帧
    QTimer* m_timer2;//二号定时器,用于隐藏按钮
    QTimer* m_timer3;//三号定时器,用于人物自主移动
    QTimer* m_timer4;//四号定时器,用于控制人物的运动模式,移动或原地不动做表情或混合

    QGraphicsDropShadowEffect m_graphicsEffet;//窗口阴影对象
    QPoint m_beginPos;//记录鼠标按下位置,用于移动窗口


    QPushButton* m_btnClose;//关闭按钮
    QPushButton* m_btnChange;//切换按钮

    QAction* actChange;
    QAction* actClose;

    int m_desktopWidth;//桌面宽度
    int m_desktopHeight;//桌面长度

    bool m_start;//当这个bool值为真时,启动动画完成
    bool m_quit;//当这个bool值为真时,当前动画完成本周期后会退出程序
    bool m_drag;//拖动的时候这个值为真


    QStringList m_animationList;//动画列表
    int m_animationIndex;//当前动画索引,和动画列表联用


    //加载配置
    void loadConfig();
    int  g_animationWidth;         //动画窗口宽度
    int  g_animationHeight;       //动画窗口高度
    int  g_animationSpeed;         //控制动画定时器触发时间间隔,值越大,动画越快.反之越慢
    int  g_btnShowTime;           //右击小萝莉时显示按钮的持续时间
    int  g_moveSpeed;               //小萝莉自主移动的速度,值越大速度越快
    int  g_moveDistance;            //小萝莉自主移动单步距离,值越大距离越大
    int  g_animationDurationMin;	//设置单个动画最小循环时间,默认最小为5s
    int  g_animationDurationMax;   //设置单个动画最大循环时间,默认最大为30s
};
#endif // MAINWINDOW_H
